Voice transmission over packet networks is subject to delay variation, commonly known as jitter, due to highly heterogeneous network conditions. In IP-based networks, fixed delay can be attributed to algorithmic, processing and propagation delays due to material and distance, whereas variable delay is caused by the fluctuation of IP network traffic, different transmission path over the internet, etc. VoIP (voice over Internet Protocol) receivers generally rely on a “jitter buffer” to counter the negative impact of jitter. Here the packet delay variation, or jitter, is defined as the difference between the actual arrival time of the packets and a reference clock at the normal packet rate. By introducing an additional “playout” delay, a jitter buffer aims at transforming the uneven flow of arriving packets into a regular flow of packets, such that delay variations will not cause perceptual quality degradation to the end users. Voice communication is highly delay sensitive, where one-way delay should be kept below 150 ms for normal conversation, with above 400 ms being considered unacceptable (ITU Recommendation G.114). Therefore, the additional delay added by a jitter buffer needs to be as small as possible. Unfortunately, a small jitter buffer will lead to more frequent packet loss when packets arrive later than their expected playout deadline due to jittered network.
Various jitter buffer management methods have been proposed in an aim to find an optimal balance between delay and packet loss. In a typical jitter buffer algorithm, the incoming packets are stored in a buffer, along with meta-data, like sequence numbers etc. After certain amount of time, e.g. 20 ms, the oldest packet from the jitter buffer will be sent to the decoder. New packets are inserted into the jitter buffer based on their sequence number accordingly. Two general approaches exist in jitter buffer design, namely fixed jitter buffer and adaptive jitter buffer. A jitter buffer with fixed size provides a constant buffer delay and incurs minimum complexity. Obviously it can introduce excessive delay if large delay variations need to be accommodated. Adaptive jitter buffer allocates the size dynamically, which are more commonly used in practice.
There is a need to further improve the jitter buffer management algorithm such that an optimal overall perceived quality can be achieved.